<?php
/**
 * MyConverter.class.php
 * 
 * (C) 2009, tetsuya.odaka(EzoGP).
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/* 
 * データコンバート用Class
	 * 
 * author；		t.odaka
 * date;		2009/4/23
 * 
 * modified		2009/5/25	t.odaka	化けそうな文字を追加
 * 				2009/5/26	t.odaka	convertToRegalChar()を追加
 * 
*/

class MyConverter {

	/* 
	 * プロパティー
	 *  適当に書き換えてください。
	*/
	var $_illegalCharsReg = '/[①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ㈱㈲㎝㎏～]+/u';
    var $_replaceChars = '??';
	
    var $_illegalChars ='①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ㈱㈲㎝㎏～';
    
    var $_legalChars = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
		   		1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,
    			'（株）','（有）','cm','kg','-');
	
    /* 
	 * デフォルトのコンストラクタ 
	 */
	function __construct() {
	}

    /* 
	 * 禁則文字の置換メソッド(UTF-8のみ)
	 *   パラメータ
	 * 	 $_str		:   禁則文字があるかもしれない文字列
	 *   戻り値		:   置換後の文字列
	 */
	function convertIllegal($_str){
		
		// debug用
		require("../Myznala/debugLog.php");
		// 置換
		mb_regex_encoding('UTF-8');
		$_ret = preg_replace($this->_illegalCharsReg, 
						$this->_replaceChars, $_str);
						
		return $_ret;
	}

    /* 
	 * 禁則文字の置換メソッド(UTF-8のみ)
	 *   パラメータ
	 * 	 $_str		:   禁則文字があるかもしれない文字列
	 *   戻り値		:   置換後の文字列
	 */
	function convertToRegalChar($_str){
	
		// debug用
		require("../Myznala/debugLog.php");
		
		// 置換
		mb_regex_encoding('UTF-8');
		$_ret = preg_match_all($this->_illegalCharsReg, 
						$_str, $_matches);
		
		if($_ret>0){
//			$myDebugLog->debug($_matches[0]);
		
			$_lArr = array(); //長さ２以上の禁止文字列を入れる。

			// 禁止文字が並んでないとき処理。
			foreach($_matches[0] as $key => $val){
				if(mb_strlen($val,'UTF-8') == 1){
				// 1文字だけとれた場合
					$_idx = mb_strpos($this->_illegalChars, $val, 0, 'UTF-8');
					$_reg = '/['.$val.']+/u';
					$_str = preg_replace($_reg, 
								$this->_legalChars[$_idx], $_str);
				}else{
				// 2文字以上とれた場合
					array_push($_lArr, $val);
				}
			}
		}

		// 2文字以上禁止文字が並んでいたときの処理。
		if(count($_lArr)>0){
			// 1文字ずつに分割して、$_sArrに入れる。
			$_sArr = array();
			foreach($_lArr as $key => $val){
				$val = mb_convert_encoding($val,'UTF-8','auto');
				$_len = mb_strlen($val,'UTF-8');
				for($i=0; $i < $_len; $i++){
					$_wk = mb_substr($val, $i, 1,'UTF-8');
					array_push($_sArr, $_wk);
				}
			}
			
			// $_sArrから禁止文字を一文字ずつ取り出し、置換する。
			foreach($_sArr as $key => $val){
					$_idx = mb_strpos($this->_illegalChars, $val, 0, 'UTF-8');
					$_reg = '/['.$val.']+/u';
					$_str = preg_replace($_reg, 
								$this->_legalChars[$_idx], $_str);
			}
		}
		
		$_ret = $_str;
						
		return $_ret;
	}	
	
	/* 
	 * サニタイズ
	 *   入力値のサニタイズを行う
	 *   パラメータ
	 * 	 $_str		:   検証する文字列
	 *   $_encode   :	エンコーディング
	 * 
	 */
	function sanitize($_str, $_encode){
		$_ret = htmlentities($_str,ENT_QUOTES,$_encode);
		return $_ret;
	}
	
	/*
	 * デフォルトフィルター
 	 *   データがnullの場合、デフォルト値をセット後、サニタイズを行います。
	 *   パラメータ
	 * 	 $_str			:   検証する文字列
	 *   $_defaultVal	:	$_strがnullの場合に設定する値
	 *   $_encode   	:	エンコーディング
	 * 	 
	 */	
	function setDefault($_str, $_defaultVal, $_encode){
		if($_str == null){
			$_ret = $_defaultVal;	
		} else {
			$_ret = $this->sanitize($_str,$_encode);
		}
		return $_ret;
	}
	
	/*
	 * リクエストパラメータの一括取得
 	 *   リクエストパラメータを取得して、サニタイズを行い、連想配列で返却します。
	 *   戻り値
	 * 	 $_array		:   key=>value式の連想配列
	 * 	 
	 */	
	function getRequestParameters(){
		// リクエストデータの取り出し
		switch($_SERVER['REQUEST_METHOD']) {
			case 'GET'	: $_rMethod = &$_GET; break;
			case 'POST'	: $_rMethod = &$_POST; break;
			default:
		}
			
		$_array = array();
		foreach ($_rMethod as $_key => $_value) {
			$_key=$this->sanitize(mb_convert_encoding($_key,'UTF-8','auto'),'UTF-8');
			$_value	=$this->sanitize(mb_convert_encoding($_value,'UTF-8','auto'),'UTF-8');
			$_array[$_key]=$_value;
		}
		return $_array;
	}
}
?>